home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 25 / AACD 25.iso / AACD / Magazine / Online / QMail / source / triggerpull.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-09-26  |  1.2 KB  |  55 lines

  1. #ifndef __amigaos__
  2. #include "ndelay.h"
  3. #include "open.h"
  4. #else
  5. #include <exec/types.h>
  6. #include <exec/tasks.h>
  7. #include <dos/dos.h>
  8. #include <dos/dosextens.h>
  9. #include <proto/exec.h>
  10. #include <proto/dos.h>
  11. #include <string.h>
  12. #include <signal.h>
  13. #endif /* __amigaos__ */
  14. #include "triggerpull.h"
  15.  
  16. void triggerpull()
  17. {
  18. #ifndef __amigaos__
  19.  int fd;
  20.  
  21.  fd = open_write("lock/trigger");
  22.  if (fd >= 0)
  23.   {
  24.    ndelay_on(fd);
  25.    write(fd,"",1); /* if it fails, bummer */
  26.    close(fd);
  27.   }
  28. #else /* __amigaos__ */
  29.   /* This is the ugly part. */
  30.   ULONG maxCLI, i;
  31.   struct Process *proc;
  32.   struct CommandLineInterface *cli;
  33.   UBYTE *cmdName;
  34.   int omask;
  35.  
  36.   /* Disable Un*x signals. */
  37.   omask = sigsetmask (~0);
  38.   /* Forbid preemptive task switching. :-( */
  39.   Forbid ();
  40.   maxCLI = MaxCli ();
  41.   /* Send a Ctrl-D signal to all processes named "qmail-send". */
  42.   for (i = 1UL; i <= maxCLI; i++)
  43.     if ((proc = FindCliProc (i)))
  44.       if ((cli = BADDR (proc->pr_CLI)))
  45.         if ((cmdName = BADDR (cli->cli_CommandName)))
  46.           if (cmdName[0] > 0 && 0 == strncmp ("qmail-send", &cmdName[1], cmdName[0]))
  47.           {
  48.             Signal ((struct Task *) proc, SIGBREAKF_CTRL_D);
  49.           }
  50.  
  51.   Permit ();
  52.   sigsetmask (omask);
  53. #endif /* __amigaos__ */
  54. }
  55.